tRPC初探,开源RPC框架新成员 您所在的位置:网站首页 grpc rpc区别 tRPC初探,开源RPC框架新成员

tRPC初探,开源RPC框架新成员

2024-06-25 00:57| 来源: 网络整理| 查看: 265

在最近的技术探索中,我触到了一个全新的开源RPC框架——tRPC。这个新框架给我留下了深刻的印象,我想借此机会分享一下我的初体验和一些观察。

什么是tRPC?

tRPC是一个高性能、轻量级、支持多语言的开源RPC框架,基于插件化理念设计,整体特点:

易用性:tRPC提供了简洁明了的API和文档,使得开发者可以快速地上手并构建复杂的分布式系统。用户基于框架进行服务开发简单方便;高性能:tRPC使用了高效的序列化和反序列化机制,以及优化的网络通信协议,使得它在处理大量请求时能够保持出色的性能。框架具备高性能,能适用互联网海量访问场景。插件化:框架在架构设计和具体实现上进行分层和模块化,各个核心模块可拔插,并能够独立演进可扩展:tRPC允许开发者根据自己的需求进行定制和扩展,包括添加新的传输协议、序列化机制等。安全性:tRPC内置了丰富的安全特性,如身份验证、访问控制、加密等,以保障分布式系统的安全。

具体可以查看官网(https://trpc.group/)和开源仓库(https://github.com/trpc-group)了解

小试tRPC

首先我们先clone一下GitHub仓库中的trpc-go:git clone https://github.com/trpc-group/trpc-go,找到example目录下的helloworld目录:

按照文档我们可以先运行一下:

server端

代码语言:shell复制cd trpc-go\examples\helloworld\server go run main.go -conf ./trpc_go.yaml

client端

代码语言:shell复制cd trpc-go\examples\helloworld\client go run main.go

很明显我们发现tRPC服务端的运行是需要配置文件的,这个我们放在下面再讲,接下来我们仿照helloworld程序手动的了解下tRPC一个接口的创建和调用过程:

第一步:安装tRPC中对于protobuf文件的编译工具

代码语言:shell复制go install trpc.group/trpc-go/trpc-cmdline/trpc@latest

第二步:在protobuf文件中增加接口定义

代码语言:text复制syntax = "proto3"; package trpc.helloworld; option go_package="trpc.group/trpc-go/trpc-go/examples/helloworld/pb"; service Greeter { rpc Hello (HelloRequest) returns (HelloReply) {} rpc Hi (HiRequest) returns (HiResponse) {} } message HelloRequest { string msg = 1; } message HelloReply { string msg = 1; } message HiRequest { string name = 1; } message HiResponse { string msg = 1; }

第三步:编译protobuf文件(参考Makefile中的命令)

代码语言:shell复制trpc create -p helloworld.proto --rpconly --nogomod --mock=false

第四步:编写RPC服务端接口实现

代码语言:go复制func main() { s := trpc.NewServer() pb.RegisterGreeterService(s, &Greeter{}) if err := s.Serve(); err != nil { log.Error(err) } } type Greeter struct{} func (g Greeter) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) { log.Infof("got hello request: %s", req.Msg) return &pb.HelloReply{Msg: "Hello " + req.Msg + "!"}, nil } func (g Greeter) Hi(ctx context.Context, req *pb.HiRequest) (*pb.HiResponse, error) { log.Infof("got hi request: %s", req.Name) return &pb.HiResponse{Msg: "Hi " + req.GetName() + "!"}, nil }

第五步:RPC客户端调用接口

代码语言:go复制func main() { c := pb.NewGreeterClientProxy(client.WithTarget("ip://127.0.0.1:8000")) rsp, err := c.Hi(context.Background(), &pb.HiRequest{Name: "海风极客"}) if err != nil { log.Error(err) } log.Info(rsp.Msg) }

最后依次运行服务端和客户端代码就可以了

与gRPC相比有什么不同

因为在使用tRPC之前,最熟悉的还是gRPC,相比gRPC,我觉得tRPC在以下几个方面与之不同(也是刚刚了解,先分享主要的几个):

(1)首先,名字不同

一个叫gRPC,由Google开源,一个叫tRPC,由腾讯开源

(2)tRPC更倾向于插件化

阅读源码后我们大概可以得出结论,虽然tRPC和gRPC都支持拦截器,但是tRPC能够通过抽象让用户自定义更多的插件并注入到服务中,增加了灵活性和可扩展性

(3)tRPC支持配置文件

配置文件应该是tRPC与gRPC最大的不同之一,当然通过简单的编码后两者都可以支持配置文件,但是tRPC作为原生就支持配置文件的RPC框架,可以用配置文件的配置内容来替代很多代码逻辑。其中配置文件最大的一个优势就是修改配置时无需重新编译源代码,节省了编译时间,但是如果对配置文件了解的不够全面,也可能是一个隐患,因此是需要一些学习理解的时间成本的,反正各有利弊吧。

小总结

通过对tRPC的初步探索,我对这个开源RPC框架留下了深刻的印象。它的高性能、易用性、可扩展性和安全性使其成为构建分布式应用程序的理想选择。如果你正在寻找一个轻量级且功能强大的RPC框架,那么我强烈推荐你尝试一下tRPC,相信它会为你的项目带来意想不到的收获。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有